package simplefactory

const (
	implA = iota + 1
	implB
)

// Api 接口的定义，该接口可以通过简单工厂来创建
type Api interface {
	// Operation 示意，具体功能方法的定义
	// @param s 示意，需要的参数
	Operation(s string) string
}

// go语言不需要工厂类，只需要提供具体创建Api对象的方法即可
// createApi 具体创建Api对象的方法
// @return 创建好的Api对象
func createApi(condition int) Api {
	// 应该根据某些条件去选择究竟创建哪一个具体的实现对象，
	// 这些条件可以从外部传入，也可以从其他途径来获取。
	// 如果只有一个实现，可以省略条件，因为没有选择的必要。
	// 示意使用条件
	switch condition {
	case implA:
		return &ImplA{}
	case implB:
		return &ImplB{}
	default:
		return nil
	}
}

// ImplA 接口的具体实现对象A
type ImplA struct {
}

// Operation 实现功能的代码，示意一下
func (a *ImplA) Operation(s string) string {
	return "ImplA s == " + s
}

// ImplB 接口的具体实现对象B
type ImplB struct {
}

// Operation 实现功能的代码，示意一下
func (b *ImplB) Operation(s string) string {
	return "ImplB s == " + s
}

// 使用这个简单工厂的客户端在对应测试文件
